package com.mjh.controller;


import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mjh.mapper.ZyjszwrzzgpsMapper;
import com.mjh.pojo.Zyjszwrzzgps;
import com.mjh.util.JwtUtil;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Map;

/**
 *
 * 专业技术职务任职资格评审表 前端控制器
 *
 *
 * @author MJH
 * @since 2021-12-03
 */
@RestController
@RequestMapping("/review")
public class ZyjszwrzzgpsController {


    @Autowired
    private ZyjszwrzzgpsMapper zyjszwrzzgpsMapper;

    @Autowired
    private HttpServletRequest request;

    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;



    /**
     * 添加专业资格评审表
     * @param zy
     */
    @PostMapping("/add")
    public void insertZyjsps(@RequestBody Zyjszwrzzgps zy){
       Integer userId = (Integer)JwtUtil.getPayload(request, "userId");
        zy.setfUserId(userId);
        zyjszwrzzgpsMapper.insert(zy);
    }

    /**
     *查询 专业技术职务任职资格评审表
     * @return
     */
    @GetMapping("/query")
    public ResponseEntity<Zyjszwrzzgps> queryZyjszwrzzgps(){
        Integer userId = (Integer)JwtUtil.getPayload(request, "userId");
        QueryWrapper<Zyjszwrzzgps> wrapper = new QueryWrapper<>();
        wrapper.eq("f_user_id",userId);
        Zyjszwrzzgps zyjszwrzzgps = zyjszwrzzgpsMapper.selectOne(wrapper);
        return ResponseEntity.ok(zyjszwrzzgps);
    }

    /**
     * 导出Word格式评审表
     * @param id  评审表id
     */
    @RequestMapping("/export")
    public void exportWord(Integer id, HttpServletResponse response){
        Template template = null;
        Writer out=null;
        try {

            //查询评审信息
            Integer userId = (Integer)JwtUtil.getPayload(request, "userId");
            QueryWrapper<Zyjszwrzzgps> wrapper = new QueryWrapper<>();
            wrapper.eq("f_user_id",userId).eq("id",id);
            Zyjszwrzzgps zyjszwrzzgps = zyjszwrzzgpsMapper.selectOne(wrapper);
            if (zyjszwrzzgps==null){
                response.setStatus(420);
                out.write(JSONUtil.toJsonStr("没有可下载的文件"));
                return;
            }
            Map<String, Object> map = BeanUtil.beanToMap(zyjszwrzzgps);
            response.reset();
            out =new BufferedWriter(new OutputStreamWriter(response.getOutputStream()));
            response.addHeader("Content-Disposition",
                    " attachment;filename=" + new String("专业技术任职资格申报基本情况一览表.docx".getBytes("UTF-8"), "ISO-8859-1"));
            String orgin= request.getHeader("Origin");
            response.addHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));
            response.addHeader("'Access-Control-Allow-Credentials","true");
            response.setContentType("application/octet-stream");
            //生成Word文件
            template = freeMarkerConfigurer.getConfiguration().getTemplate("ZYZCPSB-temp.ftl");
            template.process(map, out);
            out.flush();

        } catch (Exception e) {
            try {
                throw e;
            } catch (TemplateException ex) {
                ex.printStackTrace();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        } finally {
            if (out!=null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }



    }





}
